package pck_tramitedocu.pck_src.pck_business;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import pck_tramitedocu.pck_src.pck_dao.itf_dao_usuario;
import pck_tramitedocu.pck_src.pck_pojos.Cls_Posibilidad;
import pck_tramitedocu.pck_src.pck_pojos.Cls_Trabajador;
import pck_tramitedocu.pck_src.pck_utiles.Cls_InvocaWebService;
import pck_tramitedocu.pck_src.pck_utiles.Cls_Parametros;
import pck_tramitedocu.pck_src.pck_utiles.cls_utilitarios;

public class cls_business_usuario implements itf_business_usuario {

    private itf_dao_usuario daoUsuarioInterface;

    public Object validarUsuario(Map<String, Object> map) {
        ArrayList<Cls_Trabajador> array_usuarios_encargaturas = Cls_InvocaWebService.validarLoginRRHHWs(map);
        Cls_Trabajador trabajador_desde_ws = new Cls_Trabajador();
        Cls_Trabajador trabajador_desde_seguridad = new Cls_Trabajador();
        boolean bandera = false;
        if(array_usuarios_encargaturas.size() == 1){
            trabajador_desde_ws = array_usuarios_encargaturas.get(0);
        }else{
            bandera=true;
        }
        try {
            if (trabajador_desde_ws == null) {
                trabajador_desde_ws = new Cls_Trabajador();
                trabajador_desde_ws.setTiene_acceso_logueo(Boolean.FALSE);
                trabajador_desde_ws.setMessage_logueo("No se encuentra conexion con El Sistema de Recursos Humanos");
                return trabajador_desde_ws;
            }
            trabajador_desde_seguridad = this.daoUsuarioInterface.validarUsuario(map);
        } catch (NullPointerException ex) {
            Logger.getLogger(cls_business_usuario.class.getName()).log(Level.SEVERE, null, ex);
            trabajador_desde_ws.setTiene_acceso_logueo(Boolean.FALSE);
            trabajador_desde_ws.setMessage_logueo("EL USUARIO, NO EXISTE EN NUESTRA BASE DE DATOS");
            return trabajador_desde_ws;
        } catch (ExceptionInInitializerError ex) {
            Logger.getLogger(cls_business_usuario.class.getName()).log(Level.SEVERE, null, ex);
            trabajador_desde_ws.setTiene_acceso_logueo(Boolean.FALSE);
            trabajador_desde_ws.setMessage_logueo("EL USUARIO, NO EXISTE EN NUESTRA BASE DE DATOS");
            return trabajador_desde_ws;
        }
        if(trabajador_desde_seguridad==null){
            trabajador_desde_ws.setTiene_acceso_logueo(Boolean.FALSE);
            trabajador_desde_ws.setMessage_logueo("DATOS INGRESADOS SON INCORRECTOS");
            return trabajador_desde_ws;
        }

        for(Cls_Trabajador trabajador: array_usuarios_encargaturas){
            if(trabajador.getEsta_vacaciones()){
                trabajador_desde_ws.setTiene_acceso_logueo(Boolean.FALSE);
                trabajador_desde_ws.setMessage_logueo("EL USUARIO <b>\""+trabajador_desde_ws.getNombres()+"\"</b>. SE ENCUENTRA DE VACACIONES");
                return trabajador_desde_ws;
            }
        }
        if(bandera){
            return array_usuarios_encargaturas;
        }
        String contrasena = (String) map.get("mp_contrasena");
        trabajador_desde_ws.setTiene_acceso_logueo(Boolean.TRUE);
        trabajador_desde_ws.setContrasena(contrasena);
        trabajador_desde_ws.setDni((String) map.get("mp_dni"));
        trabajador_desde_ws.setVa_proyectar(Boolean.valueOf(false));
        return trabajador_desde_ws;
    }

    public boolean agregarUsuario(Cls_Trabajador usuario) {
        return this.daoUsuarioInterface.agregarUsuario(usuario);
    }

    public boolean actualizarUsuario(Cls_Trabajador usuario) {
        return this.daoUsuarioInterface.actualizarUsuario(usuario);
    }

    public List obtenerMenuUsuario(String codigo) {
        return this.daoUsuarioInterface.obtenerMenuUsuario(codigo);
    }

    public boolean grabarMenuUsuario(String codigo, List menu) {
        return this.daoUsuarioInterface.grabarMenuUsuario(codigo, menu);
    }

    public itf_dao_usuario getDaoUsuarioInterface() {
        return this.daoUsuarioInterface;
    }

    public void setDaoUsuarioInterface(itf_dao_usuario daoUsuarioInterface) {
        this.daoUsuarioInterface = daoUsuarioInterface;
    }

    public ArrayList<Cls_Trabajador> obtenerTodosUsuariosEpsGrauBusiness(Map<String, String> map) {
        String codigos = (String) map.get(Cls_Parametros.Request_ARRAY_SELECCIONADO);
        ArrayList<Cls_Trabajador> array = Cls_InvocaWebService.obtieneUsuariosRRHHWs(map);
        for (Cls_Trabajador usuario : array) {
            if (map.get(Cls_Parametros.Map_FUNCION_HTML_LINK) == null) {
                usuario.opcionEsCheckBox(codigos, "proyCheck");
            } else if (map.get(Cls_Parametros.Map_FUNCION_HTML_LINK).compareToIgnoreCase(Cls_Parametros.Map_FUNCION_HTML_CHECK_BORRADOR) == 0) {
                usuario.opcionEsCheckBox(codigos, "proyCheckBorrador");
            } else {
                usuario.opcionEsLink();
            }
        }
        return array;
    }
    public ArrayList<Cls_Trabajador> obtenerTranajadorCargosEpsGrauBusiness(Map<String, String> map) {
        ArrayList<Cls_Trabajador> array = Cls_InvocaWebService.obtieneTrabajadorCargosRRHHWs(map);
        return array;
    }
    public ArrayList<Cls_Trabajador> obtenerTodosJefaturasParaFirmaEpsGrauBusiness(Map<String, String> map) {
        String codigos = (String) map.get("array_selected");
        ArrayList<Cls_Trabajador> array = cls_utilitarios.convertirArrayTrabajadorFromArrayUnidades(Cls_InvocaWebService.obtenerUnidadesOrganicas(map));
        for (Cls_Trabajador usuario : array) {
            if (map.get("2") == null){
                usuario.opcionEsCheckBox(codigos, "proyCheck");
            } else {
                usuario.opcionEsLink();
            }
        }
        return array;
    }

    public ArrayList<Cls_Trabajador> obtenerTodosUsuariosParaFirmaEpsGrauBusiness(Map<String, String> map) {
        String codigos = (String) map.get("array_selected");
        ArrayList<Cls_Trabajador> array = Cls_InvocaWebService.obtieneUsuariosRRHHWs(map);
        for (Cls_Trabajador usuario : array) {
            if (map.get("2") == null) {
                usuario.opcionEsCheckBox(codigos, "proyFirma");
            } else {
                usuario.opcionEsLink();
            }
        }
        return array;
    }

    public ArrayList<Cls_Trabajador> obtenerTodosUsuariosParaComisionEpsGrauBusiness(Map<String, String> map) {
        String codigos = (String) map.get("array_selected");
        ArrayList<Cls_Trabajador> array = Cls_InvocaWebService.obtieneUsuariosRRHHWs(map);
        for (Cls_Trabajador usuario : array) {
            if (map.get("2") == null) {
                usuario.opcionEsCheckBox(codigos, "proyCheck");
                usuario.opcionEsComboBox(codigos, "proyComision");
            } else {
                usuario.opcionEsLink();
            }
        }
        return array;
    }

    public ArrayList<Cls_Trabajador> obtenerTodosUsuariosBusiness(Map<String, String> map) {
        String codigos = (String) map.get("array_selected");
        ArrayList<Cls_Trabajador> array = Cls_InvocaWebService.obtieneUsuarioAreaRRHHWs(map);
        for (Cls_Trabajador usuario : array) {
            if (map.get("2") == null){
                usuario.opcionEsCheckBox(codigos, "proyCheck");
            } else {
                usuario.opcionEsLink();
            }
        }
        return array;
    }

    public ArrayList<Cls_Trabajador> obtenerTodosUsuariosMailBusiness(Map<String, String> map) {
        String codigos = (String) map.get("array_selected");
        ArrayList<Cls_Trabajador> array = Cls_InvocaWebService.obtenerCorreoTrabajadoresRRHHWs(map);
        for (Cls_Trabajador usuario : array) {
            if (map.get("2") == null){
                usuario.opcionEsCheckBox(codigos, "proyCheck_mail");
            } else {
                usuario.opcionEsLink();
            }
        }
        return array;
    }

    public int obtenerCantidadTrabajadoresAreaBusiness(Map<String, String> map) {
        return Cls_InvocaWebService.obtenerCantidadTrabajadoresAreaRRHHWs(map);
    }

    public int obteneTipoUsuarioDeTrabajadorBusiness(Map<String, String> map) {
        return this.daoUsuarioInterface.obteneTipoUsuarioDeTrabajadorDao(map);
    }

    public int obtenerCantidadTrabajadoresRrhhBusiness(Map<String, String> map) {
        return Cls_InvocaWebService.obtenerCantidadTrabajadoresRRHHWs(map);
    }

    public int obtenerCantidadTrabajadoresMailRrhhBusiness(Map<String, String> map) {
        return Cls_InvocaWebService.obtenerCantidadCorreosTrabajadoresRRHHWs(map);
    }

    public String agregarUsuarioEnPostgrestBusiness(Cls_Trabajador trabajador) {
        return this.daoUsuarioInterface.agregarUsuarioEnPostgrestDao(trabajador);
    }

    public ArrayList<Cls_Posibilidad> obtenerPosibilidadEnvioBusiness(String unidad) {
        return Cls_InvocaWebService.obtenerPosibilidadEnvioRRHHWs(
                cls_utilitarios.generarHashMapParaRequest(
                new String[] {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANIZATIVA, unidad}));
    }

    public ArrayList<Cls_Posibilidad> obtenerPosibilidadProyeccionBusiness(String unidad) {
        return Cls_InvocaWebService.obtenerPosibilidadProyeccionRRHHWs(
                cls_utilitarios.generarHashMapParaRequest(
                new String[] {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANIZATIVA, unidad}));
    }

    public ArrayList<Cls_Posibilidad> obtenerPosibilidadVistoBuenoBusiness(String unidad) {
        return Cls_InvocaWebService.obtenerPosibilidadVistoBuenoRRHHWs(
                cls_utilitarios.generarHashMapParaRequest(
                new String[] {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANIZATIVA, unidad}));
    }
}